package com.project.springboot.utils;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;

public class ImageUtils {

	/**
	 * 将图片文件转化为字节数组字符串，并对其进行Base64编码处理
	 * description: 将网络图片编码为base64
	 * @author 朱正磊
	 * @date 2024-08-23 15:51:47
	 * @param path 图片url地址
	 * @return 返回经过base64编码的图片
	 */
	@SuppressWarnings("DuplicatedCode")
	public static String encodeNetImageToBase64String(String path) {
		// 得到图片的二进制数据，以二进制封装得到数据，具有通用性
		try (ByteArrayOutputStream outStream = new ByteArrayOutputStream()) {
			URL url = new URL(path);
			// 打开链接
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			// 设置请求方式为"GET"
			conn.setRequestMethod("GET");
			// 超时响应时间为5秒
			conn.setConnectTimeout(5 * 1000);
			// 通过输入流获取图片数据
			InputStream inStream = conn.getInputStream();
			// 创建一个Buffer字符串
			byte[] buffer = new byte[1024];
			// 每次读取的字符串长度，如果为-1，代表全部读取完毕
			int len;
			// 使用一个输入流从buffer里把数据读取出来
			while ((len = inStream.read(buffer)) != -1) {
				// 用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度
				outStream.write(buffer, 0, len);
			}
			// 关闭输入流
			inStream.close();
			byte[] data = outStream.toByteArray();
			// 对字节数组Base64编码
			return Base64.getEncoder().encodeToString(data);
		} catch (Exception e) {
			throw new RuntimeException("图片转换失败，请联系客服！");
		}
	}

	/**
	 * 将图片文件转化为字节数组字符串，并对其进行Base64编码处理
	 * description: 将网络图片编码为base64
	 * @author 朱正磊
	 * @date 2024-08-23 15:51:47
	 * @param path 图片url地址
	 * @return 返回经过base64编码的图片
	 */
	@SuppressWarnings("DuplicatedCode")
	public static byte[] encodeNetImageToBase64(String path) {
		// 得到图片的二进制数据，以二进制封装得到数据，具有通用性
		try (ByteArrayOutputStream outStream = new ByteArrayOutputStream()) {
			URL url = new URL(path);
			// 打开链接
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			// 设置请求方式为"GET"
			conn.setRequestMethod("GET");
			// 超时响应时间为5秒
			conn.setConnectTimeout(5 * 1000);
			// 通过输入流获取图片数据
			InputStream inStream = conn.getInputStream();
			// 创建一个Buffer字符串
			byte[] buffer = new byte[1024];
			// 每次读取的字符串长度，如果为-1，代表全部读取完毕
			int len;
			// 使用一个输入流从buffer里把数据读取出来
			while ((len = inStream.read(buffer)) != -1) {
				// 用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度
				outStream.write(buffer, 0, len);
			}
			// 关闭输入流
			inStream.close();
			byte[] data = outStream.toByteArray();
			// 对字节数组Base64编码
			return Base64.getEncoder().encode(data);
		} catch (Exception e) {
			throw new RuntimeException("图片转换失败，请联系客服！");
		}
	}

}
